En este trabajo se abordará el problema de agrupar los barrios de Medellín de acuerdo a distintas dimensiones y analizar espacialmente las agrupaciones.

#Dimensión Vivienda y Servicios Públicos

La dimensión de vivienda y servicios públicos miden dentro de la encuesta de calidad de vida como viven los Medellinenses, en que condiciones estan sus hogares a nivel de tipo de vivienda y sus características físicas: material de paredes y pisos tenencias y financiación de la vivienda: tipo de tenencia de la vivienda; tenencia de escritura de propiedad; subsidios recibidos para la compra, construcción, mejora, titulación o escrituración de la vivienda

Para la el análisis de la dimensión de VIVIENDA Y SERVICIOS PUBLICOS en los barrios de Medellín se toman las siguientes preguntas con sus respectivos indicadores:

El insumo principal de este trabajo son los datos abiertos del portal Medata[1] y en particular la Encuesta de Calidad de Vida Medellín Cómo vamos.

ECV <- read.csv("./dataSet/encuesta_calidad_vida.csv", header = TRUE, sep=";")

Librerias a utilizar en el desarrollo del proyecto

#library(xlsx)
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(cluster)
library(plyr)
library(ggplot2)
library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:GGally':
## 
##     nasa
## The following objects are masked from 'package:plyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(magrittr)
library('sqldf')
## Loading required package: gsubfn
## Loading required package: proto
## Loading required package: RSQLite
library(rgdal)
## Loading required package: sp
## rgdal: version: 1.4-8, (SVN revision 845)
##  Geospatial Data Abstraction Library extensions to R successfully loaded
##  Loaded GDAL runtime: GDAL 2.4.2, released 2019/06/28
##  Path to GDAL shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/gdal
##  GDAL binary built with GEOS: FALSE 
##  Loaded PROJ.4 runtime: Rel. 5.2.0, September 15th, 2018, [PJ_VERSION: 520]
##  Path to PROJ.4 shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/proj
##  Linking to sp version: 1.3-2
library(leaflet)
library(plotly)
## 
## Attaching package: 'plotly'
## The following objects are masked from 'package:plyr':
## 
##     arrange, mutate, rename, summarise
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout

Función que permite sacar la moda para las preguntas orientadas a hogares

getmode <- function(v) {
   uniqv <- unique(v)
   uniqv[which.max(tabulate(match(v, uniqv)))]
}

Se procede a normalizar las cabeceras del dataframe del set de datos

names_ECV <- names(ECV)
i = 1
l_names <- list()
for (name_col in names_ECV) {
    str_col <- unlist(strsplit(name_col," "))
    str_col <- unlist(strsplit(str_col,"[.]"))
    if (length(str_col) > 2){
        l_names[i] <- paste(str_col[2],str_col[3],sep = '_')    
    }
    else
    {
        l_names[i] <- paste(str_col[2])   
    }

    i = i + 1
}

ECV <- setNames(ECV,l_names)

##1. Caracterización de las dimensiones para la dimensión VIVIENDA Y SERVICIOS PUBLICOS

Construcción del dataframe con las preguntas de interes para la dimensión vivienda y servicios públicos

ECV_VIVIENDA <- ECV[,c("encuesta","persona","comuna","barrio","estrato","p_1","p_12","p_26","p_30","p_146",
                       "p_149","p_158","p_160","p_162","p_164","p_165","p_169","p_173","p_174","p_178","p_180","p_226")]

No existen valores nulos dentro de las preguntas de vivienda

summary(ECV_VIVIENDA)
##     encuesta            persona                   comuna      
##  Min.   :1.201e+04   Min.   : 1.000   MANRIQUE       : 28951  
##  1st Qu.:5.812e+07   1st Qu.: 1.000   BELEN          : 26330  
##  Median :4.713e+08   Median : 2.000   ARANJUEZ       : 24860  
##  Mean   :1.424e+09   Mean   : 2.641   POPULAR        : 22587  
##  3rd Qu.:1.592e+09   3rd Qu.: 4.000   ROBLEDO        : 22051  
##  Max.   :7.489e+09   Max.   :20.000   DOCE DE OCTUBRE: 21787  
##                                       (Other)        :184008  
##                       barrio          estrato        p_1        
##  CABECERA SAN ANT DE PR. :  8987   Min.   :1.000   1   : 76725  
##  LAS GRANJAS             :  5192   1st Qu.:2.000   2   :222915  
##  MORAVIA                 :  4537   Median :2.000   NULL: 30934  
##  SANTO DOMINGO SABIO Nº 1:  4152   Mean   :2.701                
##  POPULAR                 :  4027   3rd Qu.:3.000                
##  CASTILLA                :  3873   Max.   :6.000                
##  (Other)                 :299806                                
##       p_12             p_26             p_30            p_146      
##  Min.   : 1.000   Min.   :-99.00   Min.   :-99.00   Min.   :1.000  
##  1st Qu.: 3.000   1st Qu.:-88.00   1st Qu.:  3.00   1st Qu.:4.000  
##  Median : 4.000   Median :-88.00   Median : 11.00   Median :4.000  
##  Mean   : 4.281   Mean   :-60.64   Mean   : 12.15   Mean   :4.355  
##  3rd Qu.: 5.000   3rd Qu.:  1.00   3rd Qu.: 26.00   3rd Qu.:5.000  
##  Max.   :20.000   Max.   : 11.00   Max.   :106.00   Max.   :5.000  
##                                                                    
##      p_149            p_158             p_160             p_162      
##  Min.   : 1.000   Min.   :-88.000   Min.   :-88.000   Min.   :1.000  
##  1st Qu.: 1.000   1st Qu.:  1.000   1st Qu.:  2.000   1st Qu.:1.000  
##  Median : 1.000   Median :  1.000   Median :  2.000   Median :1.000  
##  Mean   : 1.079   Mean   :  1.001   Mean   :  1.776   Mean   :1.011  
##  3rd Qu.: 1.000   3rd Qu.:  1.000   3rd Qu.:  2.000   3rd Qu.:1.000  
##  Max.   :10.000   Max.   :  2.000   Max.   :  2.000   Max.   :2.000  
##                                                                      
##      p_164             p_165           p_169            p_173       
##  Min.   :-88.000   Min.   :1.000   Min.   :-88.00   Min.   :-88.00  
##  1st Qu.:  2.000   1st Qu.:1.000   1st Qu.:  2.00   1st Qu.:-88.00  
##  Median :  2.000   Median :1.000   Median :  2.00   Median :  2.00  
##  Mean   :  0.647   Mean   :1.031   Mean   :-11.95   Mean   :-24.41  
##  3rd Qu.:  2.000   3rd Qu.:1.000   3rd Qu.:  2.00   3rd Qu.:  2.00  
##  Max.   :  2.000   Max.   :2.000   Max.   :  2.00   Max.   :  2.00  
##                                                                     
##      p_174           p_178           p_180            p_226        
##  Min.   :1.000   Min.   :1.000   Min.   :-88.00   Min.   :-99.000  
##  1st Qu.:1.000   1st Qu.:1.000   1st Qu.:-88.00   1st Qu.:  1.000  
##  Median :1.000   Median :1.000   Median :  2.00   Median :  3.000  
##  Mean   :1.015   Mean   :1.428   Mean   :-36.55   Mean   :  2.314  
##  3rd Qu.:1.000   3rd Qu.:2.000   3rd Qu.:  2.00   3rd Qu.:  3.000  
##  Max.   :2.000   Max.   :2.000   Max.   :  2.00   Max.   :  6.000  
## 

Se procede a realizar el cálculo de cada uno de los indicadores definidos para la dimensión Vivienda y

#Se toma el máximo número de integrantes por encuesta
ECV_VIVIENDA_BARRIO <-ECV_VIVIENDA %>% select(encuesta,comuna, barrio,p_12) %>% 
                      group_by(encuesta, comuna, barrio) %>% 
                      summarise(total = n_distinct(encuesta),p_12 = max(p_12)) %>% ungroup() %>% 
                      group_by(comuna,barrio) %>% summarise(total = sum(total), p_12 = sum(p_12) / sum(total)) %>%   ungroup() 
#write.xlsx(ECV_VIVIENDA[ECV_VIVIENDA$barrio == 'AGUAS FRÍAS',], 'aguasfrias2.xlsx') 
#ECV_VIVIENDA[,c("p_26")]
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_26 == 1,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_26 = min(p_26)) %>% ungroup() %>%
       group_by(comuna,barrio) %>% summarise(p_26 = sum(p_26)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_26 <- ECV_VIVIENDA_BARRIO$p_26 / ECV_VIVIENDA_BARRIO$total
ECV_VIVIENDA$p_antiguedad <- ifelse(ECV_VIVIENDA$p_30 >= 0 & ECV_VIVIENDA$p_30 <= 5, 1, ifelse(ECV_VIVIENDA$p_30 < 0, 0, 2))
# 1 menos de 5 años, 0 No sabe, 2 más de 6 años

tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_antiguedad == 2,] %>% 
       group_by(encuesta, comuna ,barrio) %>% summarise(p_30 = n_distinct(p_antiguedad)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_30 = sum(p_30)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_30 <- ECV_VIVIENDA_BARRIO$p_30 / ECV_VIVIENDA_BARRIO$total 

*Cálculo P_146_1. Porcentaje de hogares del barrio que viven en Rancho o vivienda de desechos

#ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 1,]
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 1,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total 

colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_1'

*Cálculo P_146_2. Porcentaje de hogares del barrio que viven en Cuarto(s)

tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 2,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total 

colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_2'

*Cálculo P_146_3. Porcentaje de hogares del barrio que viven en Cuartos en inquilinato

tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 3,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total 

colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_3'

*Cálculo P_146_4. Porcentaje de hogares del barrio que viven en Apartamento

tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 4,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total 

colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_4'

*Cálculo P_146_5. Porcentaje de hogares del barrio que viven en Casa

tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 5,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE) 

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total 

colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_5'
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_149 == 1,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_149 = getmode(p_149)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_149 = sum(p_149)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE) 

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_149 <- ECV_VIVIENDA_BARRIO$p_149 / ECV_VIVIENDA_BARRIO$total 
ECV_VIVIENDA$p_SP <- ifelse(ECV_VIVIENDA$p_158 == 1 & ECV_VIVIENDA$p_162 == 1 & ECV_VIVIENDA$p_165 == 1
                          & ECV_VIVIENDA$p_174 == 1, 1, 0)

tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_SP == 1,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_SP = getmode(p_SP)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_SP = sum(p_SP)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_SP <- ECV_VIVIENDA_BARRIO$p_SP / ECV_VIVIENDA_BARRIO$total
ECV_VIVIENDA$p_SPS <- ifelse(ECV_VIVIENDA$p_160 == 1 | ECV_VIVIENDA$p_164 == 1 | ECV_VIVIENDA$p_173 == 1
                          | ECV_VIVIENDA$p_169 == 1 | ECV_VIVIENDA$p_180 == 1, 1, 0)

tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_SPS == 1,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_SPS = getmode(p_SPS)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_SPS = sum(p_SPS)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_SPS <- ECV_VIVIENDA_BARRIO$p_SPS / ECV_VIVIENDA_BARRIO$total
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_178 == 1,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_178 = min(p_178)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_178 = sum(p_178)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_178 <- ECV_VIVIENDA_BARRIO$p_178 / ECV_VIVIENDA_BARRIO$total

*P_226_1. Porcentaje de hogares en arriendo o subarriendo mensual

tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_226 == 1,] %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_226 = n_distinct(encuesta)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_226 = sum(p_226)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_226 <- ECV_VIVIENDA_BARRIO$p_226 / ECV_VIVIENDA_BARRIO$total 

colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_226'] <- 'p_226_1'

*P_226_2. Porcentaje de hogares con propia

tmp <- subset(ECV_VIVIENDA, p_226 == 2 | p_226 == 3) %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_226 = n_distinct(encuesta)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_226 = sum(p_226)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE) 

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_226 <- ECV_VIVIENDA_BARRIO$p_226 / ECV_VIVIENDA_BARRIO$total 

colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_226'] <- 'p_226_2'

*P_226_3. Porcentaje de hogares en otras condiciones

tmp <- subset(ECV_VIVIENDA, p_226 == 4 | p_226 == 5 | p_226 == 6) %>% 
       group_by(encuesta, comuna, barrio) %>% summarise(p_226 = n_distinct(encuesta)) %>% ungroup() %>%
       group_by(comuna, barrio) %>% summarise(p_226 = sum(p_226)) %>% ungroup()

ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE) 

if(exists('tmp')) rm(tmp)

ECV_VIVIENDA_BARRIO$p_226 <- ECV_VIVIENDA_BARRIO$p_226 / ECV_VIVIENDA_BARRIO$total 

colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_226'] <- 'p_226_3'

Depuración de columnas

ECV_VIVIENDA_BARRIO$total <- NULL

Estadisticas básicas VIVIENDA

summary(ECV_VIVIENDA_BARRIO)
##            comuna             barrio         p_12            p_26        
##  EL POBLADO   : 22   SAN PABLO   :  3   Min.   :1.333   Min.   :0.00228  
##  ROBLEDO      : 22   EL LLANO    :  2   1st Qu.:3.144   1st Qu.:0.02949  
##  BELEN        : 21   EL SALADO   :  2   Median :3.500   Median :0.05013  
##  SAN CRISTOBAL: 21   LA ESPERANZA:  2   Mean   :3.446   Mean   :0.06946  
##  SAN JAVIER   : 19   LA FLORIDA  :  2   3rd Qu.:3.754   3rd Qu.:0.08945  
##  VILLA HERMOSA: 18   LA PALMA    :  2   Max.   :4.444   Max.   :0.33880  
##  (Other)      :187   (Other)     :297                   NA's   :35       
##       p_30           p_146_1           p_146_2           p_146_3       
##  Min.   :0.2561   Min.   :0.00073   Min.   :0.00121   Min.   :0.00096  
##  1st Qu.:0.6682   1st Qu.:0.00251   1st Qu.:0.00432   1st Qu.:0.00231  
##  Median :0.7382   Median :0.00826   Median :0.00619   Median :0.00311  
##  Mean   :0.7195   Mean   :0.01356   Mean   :0.01312   Mean   :0.00577  
##  3rd Qu.:0.7843   3rd Qu.:0.01852   3rd Qu.:0.01129   3rd Qu.:0.00521  
##  Max.   :1.0000   Max.   :0.08511   Max.   :0.33333   Max.   :0.04762  
##  NA's   :1        NA's   :261       NA's   :127       NA's   :245      
##     p_146_4           p_146_5            p_149              p_SP       
##  Min.   :0.07407   Min.   :0.02155   Min.   :0.08889   Min.   :0.1556  
##  1st Qu.:0.52805   1st Qu.:0.27375   1st Qu.:0.93085   1st Qu.:0.9145  
##  Median :0.63500   Median :0.35847   Median :0.98868   Median :0.9685  
##  Mean   :0.61220   Mean   :0.39703   Mean   :0.89359   Mean   :0.8969  
##  3rd Qu.:0.72866   3rd Qu.:0.47640   3rd Qu.:0.99813   3rd Qu.:0.9838  
##  Max.   :1.00000   Max.   :1.00000   Max.   :1.00000   Max.   :1.0000  
##  NA's   :9         NA's   :2         NA's   :1                         
##      p_SPS             p_178            p_226_1           p_226_2      
##  Min.   :0.02174   Min.   :0.03571   Min.   :0.07143   Min.   :0.1892  
##  1st Qu.:0.06149   1st Qu.:0.36346   1st Qu.:0.28603   1st Qu.:0.5325  
##  Median :0.08341   Median :0.51264   Median :0.35000   Median :0.5793  
##  Mean   :0.08691   Mean   :0.53196   Mean   :0.34257   Mean   :0.5936  
##  3rd Qu.:0.10582   3rd Qu.:0.69951   3rd Qu.:0.39198   3rd Qu.:0.6429  
##  Max.   :0.28125   Max.   :1.00000   Max.   :1.00000   Max.   :1.0000  
##  NA's   :20        NA's   :3         NA's   :5         NA's   :1       
##     p_226_3        
##  Min.   :0.008621  
##  1st Qu.:0.048632  
##  Median :0.066667  
##  Mean   :0.076476  
##  3rd Qu.:0.090909  
##  Max.   :0.428571  
##  NA's   :17

##2. Agrupamientos

Para efectos de la ejecución de los modelos, los valores del data frame ECV_VIVIENDA_BARRIO que sean nulos se llenan con 0 dado que cuando se presenta un valor NAN significa que el indicador no aplica para el barrio y el cero lo representa

ECV_VIVIENDA_BARRIO[is.na(ECV_VIVIENDA_BARRIO)] <- 0

Si bien, la mayoria de los indicadores del dataframe ECV_VIVIENDA_BARRIO se encuentran en función de hogares existe un indicador en función de personas del hogar, por lo tanto es necesario poner todos los indicadores en la misma escala

#Kmeans no acepta variables categoricas, el identificador del barrio se convierte en nombre de filas para que no sean consideras por el algoritmo
#ECV_VIVIENDA_BARRIO_SCALE <- tibble::column_to_rownames(ECV_VIVIENDA_BARRIO, var = c("comuna","barrio"))

#ECV_VIVIENDA_BARRIO_SCALE <- scale(ECV_VIVIENDA_BARRIO_SCALE)

#ECV_VIVIENDA_BARRIO_SCALE <- ECV_VIVIENDA_BARRIO %>% mutate_if(is.numeric,scale)
ECV_VIVIENDA_BARRIO_CP <- ECV_VIVIENDA_BARRIO
#Concatenación de comuna y barrio ya que existen nombres iguales de barrio en diferentes comunas
ECV_VIVIENDA_BARRIO_CP$barrio <- paste(ECV_VIVIENDA_BARRIO_CP$comuna,ECV_VIVIENDA_BARRIO_CP$barrio,sep = "-")
ECV_VIVIENDA_BARRIO_CP$comuna <- NULL

ECV_VIVIENDA_BARRIO_SCALE <- tibble::column_to_rownames(ECV_VIVIENDA_BARRIO_CP, var = "barrio")

Se utilizan diferentes métodos para determinar el k óptimo a utilizar en el algoritmo de clusterización - Kmeans

fviz_nbclust(ECV_VIVIENDA_BARRIO_SCALE, kmeans, method = "wss") + labs(title= "Número óptimo de Clusters") + xlab("Número de Cluster (K)") 

SS <- fviz_nbclust(ECV_VIVIENDA_BARRIO_SCALE, kmeans, method = "wss")
plot(2:10,diff(SS$data$y), type = "h", main="Diferencia en errores", xlab="k", ylab="diff") 

fviz_nbclust(ECV_VIVIENDA_BARRIO_SCALE, kmeans, method = "silhouette")

De acuerdo a las gráficas de los diferentes métodos, se concluye que k = 3, es el k óptimo para la dimensión VIVIENDA Y SERVICIOS PUBLICOS, por lo cual aplicaremos el algoritmo Kmeans con dicho valor de k

#ECV_VIVIENDA_BARRIO[,3:15]
set.seed(1988)
kmeans_model <- kmeans(ECV_VIVIENDA_BARRIO_SCALE, 3, nstart = 50)

El modelo da un ajuste del 60.4% con k = 3

Se procede a agregar el cluster a la data original

df_member <- cbind(ECV_VIVIENDA_BARRIO, cluster = kmeans_model$cluster)
head(df_member)
##                                             comuna
## ALTAVISTA-AGUAS FRÍAS                    ALTAVISTA
## ALTAVISTA-ALTAVISTA CENTRAL              ALTAVISTA
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA    ALTAVISTA
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN ALTAVISTA
## ALTAVISTA-BUGA PATIO BONITO              ALTAVISTA
## ALTAVISTA-CABECERA ALTAVISTA             ALTAVISTA
##                                                                  barrio
## ALTAVISTA-AGUAS FRÍAS                                       AGUAS FRÍAS
## ALTAVISTA-ALTAVISTA CENTRAL                           ALTAVISTA CENTRAL
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA       ÁREA DE EXPANSIÓN ALTAVISTA
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN ÁREA DE EXPANSIÓN BELÉN RINCÓN
## ALTAVISTA-BUGA PATIO BONITO                           BUGA PATIO BONITO
## ALTAVISTA-CABECERA ALTAVISTA                         CABECERA ALTAVISTA
##                                              p_12       p_26      p_30
## ALTAVISTA-AGUAS FRÍAS                    3.500000 0.13888889 0.7777778
## ALTAVISTA-ALTAVISTA CENTRAL              3.673913 0.02173913 0.8188406
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA    3.544118 0.13235294 0.6176471
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 2.829268 0.02439024 0.2560976
## ALTAVISTA-BUGA PATIO BONITO              3.775281 0.15730337 0.8651685
## ALTAVISTA-CABECERA ALTAVISTA             4.048780 0.19512195 0.9024390
##                                          p_146_1     p_146_2 p_146_3
## ALTAVISTA-AGUAS FRÍAS                          0 0.000000000       0
## ALTAVISTA-ALTAVISTA CENTRAL                    0 0.007246377       0
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA          0 0.014705882       0
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN       0 0.000000000       0
## ALTAVISTA-BUGA PATIO BONITO                    0 0.000000000       0
## ALTAVISTA-CABECERA ALTAVISTA                   0 0.000000000       0
##                                            p_146_4    p_146_5     p_149
## ALTAVISTA-AGUAS FRÍAS                    0.5277778 0.47222222 0.7222222
## ALTAVISTA-ALTAVISTA CENTRAL              0.4130435 0.57971014 0.4275362
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA    0.7647059 0.22058824 0.9705882
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 0.9756098 0.02439024 0.9756098
## ALTAVISTA-BUGA PATIO BONITO              0.4157303 0.58426966 0.2808989
## ALTAVISTA-CABECERA ALTAVISTA             0.3902439 0.60975610 0.6341463
##                                               p_SP      p_SPS     p_178
## ALTAVISTA-AGUAS FRÍAS                    0.8611111 0.00000000 0.3333333
## ALTAVISTA-ALTAVISTA CENTRAL              0.8043478 0.02173913 0.3043478
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA    0.9852941 0.08823529 0.4852941
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 0.9512195 0.04878049 0.9146341
## ALTAVISTA-BUGA PATIO BONITO              0.7640449 0.07865169 0.2134831
## ALTAVISTA-CABECERA ALTAVISTA             0.9512195 0.09756098 0.1951220
##                                            p_226_1   p_226_2    p_226_3
## ALTAVISTA-AGUAS FRÍAS                    0.4444444 0.4722222 0.08333333
## ALTAVISTA-ALTAVISTA CENTRAL              0.3550725 0.5507246 0.09420290
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA    0.3676471 0.5000000 0.13235294
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 0.2560976 0.6951220 0.04878049
## ALTAVISTA-BUGA PATIO BONITO              0.3033708 0.5730337 0.12359551
## ALTAVISTA-CABECERA ALTAVISTA             0.3658537 0.5853659 0.07317073
##                                          cluster
## ALTAVISTA-AGUAS FRÍAS                          3
## ALTAVISTA-ALTAVISTA CENTRAL                    1
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA          3
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN       2
## ALTAVISTA-BUGA PATIO BONITO                    1
## ALTAVISTA-CABECERA ALTAVISTA                   3

Visualizando los grupos

fviz_cluster(kmeans_model, data = ECV_VIVIENDA_BARRIO_SCALE, geom = "point") + ggtitle("Distribución de los barrios en los clusters")

Recordemos las indicadores asociados a la dimensión VIVIENDA

Análisis para cada uno de los grupos

Grupo 1

summary(df_member[df_member$cluster == 1,])
##                   comuna                      barrio        p_12      
##  SAN CRISTOBAL       :13   EL LLANO              : 2   Min.   :2.909  
##  SANTA ELENA         :11   ALTAVISTA CENTRAL     : 1   1st Qu.:3.217  
##  PALMITAS            : 8   BARRO BLANCO          : 1   Median :3.468  
##  SAN ANTONIO DE PRADO: 7   BOQUERÓN              : 1   Mean   :3.542  
##  ALTAVISTA           : 4   BUGA PATIO BONITO     : 1   3rd Qu.:3.806  
##  ARANJUEZ            : 0   CORREGIMIENTO PALMITAS: 1   Max.   :4.444  
##  (Other)             : 0   (Other)               :36                  
##       p_26              p_30           p_146_1            p_146_2       
##  Min.   :0.00000   Min.   :0.0000   Min.   :0.000000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.7428   1st Qu.:0.000000   1st Qu.:0.00000  
##  Median :0.01613   Median :0.7812   Median :0.000000   Median :0.00000  
##  Mean   :0.03763   Mean   :0.7535   Mean   :0.003572   Mean   :0.01586  
##  3rd Qu.:0.03590   3rd Qu.:0.8446   3rd Qu.:0.000000   3rd Qu.:0.00000  
##  Max.   :0.30496   Max.   :1.0000   Max.   :0.085106   Max.   :0.33333  
##                                                                         
##     p_146_3     p_146_4           p_146_5           p_149       
##  Min.   :0   Min.   :0.00000   Min.   :0.5625   Min.   :0.0000  
##  1st Qu.:0   1st Qu.:0.08578   1st Qu.:0.7434   1st Qu.:0.2900  
##  Median :0   Median :0.16667   Median :0.8000   Median :0.4275  
##  Mean   :0   Mean   :0.17412   Mean   :0.8064   Mean   :0.4327  
##  3rd Qu.:0   3rd Qu.:0.22650   3rd Qu.:0.9045   3rd Qu.:0.5384  
##  Max.   :0   Max.   :0.43750   Max.   :1.0000   Max.   :1.0000  
##                                                                 
##       p_SP            p_SPS             p_178           p_226_1      
##  Min.   :0.1556   Min.   :0.00000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.3525   1st Qu.:0.00000   1st Qu.:0.1515   1st Qu.:0.1348  
##  Median :0.5556   Median :0.06364   Median :0.2706   Median :0.2000  
##  Mean   :0.5486   Mean   :0.06409   Mean   :0.2726   Mean   :0.2163  
##  3rd Qu.:0.7230   3rd Qu.:0.09233   3rd Qu.:0.3732   3rd Qu.:0.2913  
##  Max.   :1.0000   Max.   :0.28125   Max.   :1.0000   Max.   :0.6667  
##                                                                      
##     p_226_2          p_226_3           cluster 
##  Min.   :0.3333   Min.   :0.00000   Min.   :1  
##  1st Qu.:0.5804   1st Qu.:0.03689   1st Qu.:1  
##  Median :0.6667   Median :0.09420   Median :1  
##  Mean   :0.6833   Mean   :0.10129   Mean   :1  
##  3rd Qu.:0.7854   3rd Qu.:0.13810   3rd Qu.:1  
##  Max.   :1.0000   Max.   :0.33333   Max.   :1  
## 

Barrios donde predominan las casas, el 80% de los hogares viven en casas, con un promedio de 3.5 habitantes por hogar, sus propiedades en más del 60% son propias, no todos los hogares toman el agua de las entidades prestadoras de servicios públicos y al menos el 54% de los hogares tienen acceso a los servicios públicos básicos, muy pocos (6%) de los que tienen acceso a los servicios públicos lo tienen suspendido. Solo el 27% de los hogares tienen acceso a internet

Grupo 2

summary(df_member[df_member$cluster == 2,])
##               comuna                               barrio  
##  EL POBLADO      :22   ALEJANDRÍA                     : 1  
##  BELEN           :17   ALEJANDRO ECHAVARRÍA           : 1  
##  LAURELES-ESTADIO:15   ALTAMIRA                       : 1  
##  LA CANDELARIA   :12   ALTOS DEL POBLADO              : 1  
##  LA AMERICA      :11   AREA DE EXPANCION SAN CRISTOBAL: 1  
##  ROBLEDO         : 6   ÁREA DE EXPANSIÓN BELÉN RINCÓN : 1  
##  (Other)         :14   (Other)                        :91  
##       p_12            p_26              p_30           p_146_1 
##  Min.   :1.333   Min.   :0.00000   Min.   :0.2561   Min.   :0  
##  1st Qu.:2.837   1st Qu.:0.01397   1st Qu.:0.6184   1st Qu.:0  
##  Median :2.984   Median :0.02459   Median :0.6667   Median :0  
##  Mean   :2.969   Mean   :0.02566   Mean   :0.6512   Mean   :0  
##  3rd Qu.:3.151   3rd Qu.:0.03448   3rd Qu.:0.6979   3rd Qu.:0  
##  Max.   :3.355   Max.   :0.09524   Max.   :1.0000   Max.   :0  
##                                                                
##     p_146_2            p_146_3             p_146_4          p_146_5      
##  Min.   :0.000000   Min.   :0.0000000   Min.   :0.5179   Min.   :0.0000  
##  1st Qu.:0.000000   1st Qu.:0.0000000   1st Qu.:0.6976   1st Qu.:0.1189  
##  Median :0.000000   Median :0.0000000   Median :0.7753   Median :0.2184  
##  Mean   :0.006093   Mean   :0.0009896   Mean   :0.7807   Mean   :0.2122  
##  3rd Qu.:0.004310   3rd Qu.:0.0000000   3rd Qu.:0.8667   3rd Qu.:0.2920  
##  Max.   :0.333333   Max.   :0.0476191   Max.   :1.0000   Max.   :0.4777  
##                                                                          
##      p_149             p_SP            p_SPS             p_178       
##  Min.   :0.9125   Min.   :0.6667   Min.   :0.00000   Min.   :0.3333  
##  1st Qu.:0.9907   1st Qu.:0.9725   1st Qu.:0.04630   1st Qu.:0.6853  
##  Median :0.9969   Median :0.9836   Median :0.05970   Median :0.7688  
##  Mean   :0.9905   Mean   :0.9748   Mean   :0.06226   Mean   :0.7603  
##  3rd Qu.:1.0000   3rd Qu.:0.9888   3rd Qu.:0.07432   3rd Qu.:0.8444  
##  Max.   :1.0000   Max.   :1.0000   Max.   :0.15385   Max.   :1.0000  
##                                                                      
##     p_226_1          p_226_2          p_226_3           cluster 
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.00000   Min.   :2  
##  1st Qu.:0.2561   1st Qu.:0.5595   1st Qu.:0.03306   1st Qu.:2  
##  Median :0.3250   Median :0.6205   Median :0.04557   Median :2  
##  Mean   :0.3342   Mean   :0.6170   Mean   :0.04908   Mean   :2  
##  3rd Qu.:0.3917   3rd Qu.:0.6951   3rd Qu.:0.05707   3rd Qu.:2  
##  Max.   :1.0000   Max.   :0.9231   Max.   :0.42857   Max.   :2  
## 

En promedio hay 2.9 habitantes por hogar en los barrios de este grupo, este grupo de barrios dentro de su población tiene en promedio un 2% de hogares que han llegado por problemas de orden público, el 65% de los hogares llevan más de 6 años viviendo en estos barrios y viven mayormente en apartamento, casi siempre propio o arrendado, en donde el agua es tomada de las entidades prestaras de servicios públicos y cuenta con acceso a los servicios públicos básicos. Al menos el 70% de los apartamentos cuentan con acceso a internet.

Grupo 3

summary(df_member[df_member$cluster == 3,])
##            comuna              barrio         p_12            p_26        
##  VILLA HERMOSA:18   LA ESPERANZA  :  2   Min.   :3.303   Min.   :0.00000  
##  ROBLEDO      :16   SAN PABLO     :  2   1st Qu.:3.529   1st Qu.:0.04695  
##  MANRIQUE     :15   AGUAS FRÍAS   :  1   Median :3.672   Median :0.07229  
##  ARANJUEZ     :14   ALDEA PABLO VI:  1   Mean   :3.694   Mean   :0.08821  
##  CASTILLA     :14   ALFONSO LÓPEZ :  1   3rd Qu.:3.839   3rd Qu.:0.11289  
##  SAN JAVIER   :14   ALTAVISTA     :  1   Max.   :4.328   Max.   :0.33880  
##  (Other)      :79   (Other)       :162                                    
##       p_30           p_146_1            p_146_2            p_146_3        
##  Min.   :0.2571   Min.   :0.000000   Min.   :0.000000   Min.   :0.000000  
##  1st Qu.:0.7167   1st Qu.:0.000000   1st Qu.:0.002350   1st Qu.:0.000000  
##  Median :0.7632   Median :0.000000   Median :0.005291   Median :0.000000  
##  Mean   :0.7457   Mean   :0.003005   Mean   :0.006637   Mean   :0.001643  
##  3rd Qu.:0.7962   3rd Qu.:0.001053   3rd Qu.:0.009337   3rd Qu.:0.001772  
##  Max.   :0.9524   Max.   :0.055046   Max.   :0.034722   Max.   :0.039474  
##                                                                           
##     p_146_4          p_146_5            p_149             p_SP       
##  Min.   :0.2978   Min.   :0.08621   Min.   :0.5079   Min.   :0.5556  
##  1st Qu.:0.5362   1st Qu.:0.33234   1st Qu.:0.9577   1st Qu.:0.9381  
##  Median :0.6132   Median :0.37480   Median :0.9855   Median :0.9649  
##  Mean   :0.5944   Mean   :0.39427   Mean   :0.9496   Mean   :0.9405  
##  3rd Qu.:0.6605   3rd Qu.:0.45020   3rd Qu.:0.9971   3rd Qu.:0.9798  
##  Max.   :0.9138   Max.   :0.66292   Max.   :1.0000   Max.   :1.0000  
##                                                                      
##      p_SPS             p_178           p_226_1          p_226_2      
##  Min.   :0.00000   Min.   :0.1407   Min.   :0.1947   Min.   :0.1892  
##  1st Qu.:0.07629   1st Qu.:0.3467   1st Qu.:0.3307   1st Qu.:0.5200  
##  Median :0.09801   Median :0.4618   Median :0.3609   Median :0.5564  
##  Mean   :0.09652   Mean   :0.4579   Mean   :0.3692   Mean   :0.5541  
##  3rd Qu.:0.11640   3rd Qu.:0.5569   3rd Qu.:0.3992   3rd Qu.:0.5879  
##  Max.   :0.24138   Max.   :0.7868   Max.   :0.8000   Max.   :0.7632  
##                                                                      
##     p_226_3           cluster 
##  Min.   :0.00000   Min.   :3  
##  1st Qu.:0.06079   1st Qu.:3  
##  Median :0.07580   Median :3  
##  Mean   :0.07818   Mean   :3  
##  3rd Qu.:0.09402   3rd Qu.:3  
##  Max.   :0.22222   Max.   :3  
## 

Barrios con promedio de 4 personas por hogar, al menos el 70% de los hogares han vivido allá por más de 6 años en sus casas o apartamentos arrendados o propios, cuantan con los servicios páblicos básicos, solo el 9% de ellos tienen suspendido alguno de los servicios , menos del 45% de los hogares de este grupo no tienen internet. 8% de los hogares de este barrio han llegado al sector por problemas de orden público.

Análisis general de los grupos de acuerdo a las preguntas de la Encuesta de Calidad de Vida de Medellín

ECV_VIVIENDA_KMEANS <- kmeans_model$centers
ECV_VIVIENDA_KMEANS <- data.frame(ECV_VIVIENDA_KMEANS)
ECV_VIVIENDA_KMEANS %>% tibble::rownames_to_column("cluster") -> ECV_VIVIENDA_KMEANS

ECV_VIVIENDA_KMEANS$cluster <- as.factor(ECV_VIVIENDA_KMEANS$cluster)
 
summary_cluster_means <- ggparcoord(data = ECV_VIVIENDA_KMEANS, columns = c(2:14), groupColumn = "cluster", scale = "globalminmax", showPoints = TRUE, alphaLines = 0.5) + labs(x = "Indicador / Preguntas", y = "Medias", title = "Análisis General de los cluster de acuerdo a las preguntas de la dimensión") + theme(plot.title = element_text(size=12), axis.text=element_text(size=8))

ggplotly(summary_cluster_means)

Caracteristicas que distinguen un grupo de barrios de otro

Conozcamos algunos barrios que pertenecen a cada uno de estos grupos

#df_member[order(df_member$cluster),]
head(df_member[df_member$cluster == 1,]$barrio)
## [1] ALTAVISTA CENTRAL       BUGA PATIO BONITO       EL CORAZÓN EL MORRO    
## [4] SAN JOSÉ DEL MANZANILLO CORREGIMIENTO PALMITAS  LA ALDEA               
## 299 Levels: AGUAS FRÍAS ALDEA PABLO VI ALEJANDRÍA ... YARUMALITO
head(df_member[df_member$cluster == 2,]$barrio)
## [1] ÁREA DE EXPANSIÓN BELÉN RINCÓN BELÉN                         
## [3] CERRO NUTIBARA                 DIEGO ECHAVARRÍA              
## [5] EL NOGAL - LOS ALMENDROS       FÁTIMA                        
## 299 Levels: AGUAS FRÍAS ALDEA PABLO VI ALEJANDRÍA ... YARUMALITO
head(df_member[df_member$cluster == 3,]$barrio)
## [1] AGUAS FRÍAS                 ÁREA DE EXPANSIÓN ALTAVISTA
## [3] CABECERA ALTAVISTA          EL JARDÍN                  
## [5] LA ESPERANZA                SAN PABLO                  
## 299 Levels: AGUAS FRÍAS ALDEA PABLO VI ALEJANDRÍA ... YARUMALITO

##3. Análisis espacial

Se cargan las subdivisiones territoriales de Medellín, tomadas de la página web de opendata[2]

barrios_med <- readOGR("./dataSet/Barrio_Vereda/Barrio_Vereda.shp",layer="Barrio_Vereda")
## OGR data source with driver: ESRI Shapefile 
## Source: "/Users/yosel/Desktop/Especializacion/AprendizajeEstadistico/Agrupamiento/Taller 01/TAE_T1/dataSet/Barrio_Vereda/Barrio_Vereda.shp", layer: "Barrio_Vereda"
## with 332 features
## It has 6 fields
## Integer64 fields read as strings:  OBJECTID SUBTIPO_BA
#Conversión de codificaciones 
nombres_barrios <- iconv(barrios_med@data$NOMBRE,"UTF-8","ISO_8859-1")
df_member$barrio <- tolower(df_member$barrio)

Función que busca capitalizar los nombres de los barrios

Caps <- function(x) {
  s <- strsplit(x, " ")[[1]]
  paste(toupper(substring(s, 1,1)), substring(s, 2), sep="", collapse=" ")
}

df_member$barrio <- sapply(df_member$barrio, Caps)

Debido a inconsistenias entre los nombres de los barrios de la data de poligonos y los nombres de los barrios de la Encuesta de Calidad de Vida, se procede a realizar reemplazos manuales

df_member$barrio[df_member$barrio == "Barrios De Jesús"] <- "Barrios de Jesús"
df_member$barrio[df_member$barrio == "Piedras Blancas"] <- "Piedras Blancas - Matasano"
df_member$barrio[df_member$barrio == "Area Expansion San Antonio De Prado"] <- "Ã\u0081rea de Expansión San Antonio de Prado"
df_member$barrio[df_member$barrio == "Prado"] <- "San Antonio de Prado"
df_member$barrio[df_member$barrio == "Altavista Central"] <- "Altavista Sector Central"
df_member$barrio[df_member$barrio == "San José Del Manzanillo"] <- "San José del Manzanillo"
df_member$barrio[df_member$barrio == "El Yolombo"] <- "Yolombo"
df_member$barrio[df_member$barrio == "Urquita"] <- "Urquitá"
df_member$barrio[df_member$barrio == "Corregimiento Palmitas"] <- "Palmitas Sector Central"
df_member$barrio[df_member$barrio == "San Jose De La Montaña"] <- "San José de La Montaña"
df_member$barrio[df_member$barrio == "Cabecera San Cristóbal"] <- "Cabecera Urbana Corregimiento San Cristóbal"
df_member$barrio[df_member$barrio == "Area Expansion Pajarito"] <- "Área de Expansión Pajarito"
df_member$barrio[df_member$barrio == "Area De Expancion San Cristobal"] <- "Área de Expansión San Cristóbal"
df_member$barrio[df_member$barrio == "Santa Maria De Los ángeles"] <- "Santa Mar�a de Los Ángeles"
df_member$barrio[df_member$barrio == "Juan Pablo Ii"] <- "Parque Juan Pablo II"
df_member$barrio[df_member$barrio == "Bombona No.1"] <- "Bomboná No.1"
df_member$barrio[df_member$barrio == "Bombona No.2"] <- "Bomboná No.2"
df_member$barrio[df_member$barrio == "La Asomadera No.1"] <- "Asomadera No.1"
df_member$barrio[df_member$barrio == "La Asomadera No.2"] <- "Asomadera No.2"
df_member$barrio[df_member$barrio == "Los Cerros El Verjel"] <- "Los Cerros El Vergel"
df_member$barrio[df_member$barrio == "Villa Tina"] <- "Villatina"
df_member$barrio[df_member$barrio == "Santa Ines"] <- "Santa Inés"
df_member$barrio[df_member$barrio == "Campo Valdes No.2"] <- "Campo Valdés No.2"
df_member$barrio[df_member$barrio == "Progreso"] <- "El Progreso"
df_member$barrio[df_member$barrio == "Progreso  no.2"] <- "Progreso No.2"
df_member$barrio[df_member$barrio == "Doce De Octubre No.1"] <- "Doce de Octubre No.1"
df_member$barrio[df_member$barrio == "Doce De Octubre No.2"] <- "Doce de Octubre No.2"
df_member$barrio[df_member$barrio == "Santo Domingo Sabio No.1"] <- "Santo Domingo Savio No.1"
df_member$barrio[df_member$barrio == "Santo Domingo Sabio No.2"] <- "Santo Domingo Savio No.2"
df_member$barrio[df_member$barrio == "Moscu No.1"] <- "Moscú No.1"
df_member$barrio[df_member$barrio == "Moscu No.2"] <- "Moscú No.2"
df_member$barrio[df_member$barrio == "San Josela Cima No.1"] <- "San José La Cima No.1"
df_member$barrio[df_member$barrio == "San Jose La Cima No.2"] <- "San José La Cima No.2"
df_member$barrio[df_member$barrio == "Villa Del Socorro"] <- "Villa del Socorro"
df_member$barrio[df_member$barrio == "El Playon De Los Comuneros"] <- "Playón de Los Comuneros"
df_member$barrio[df_member$barrio == "Santa Fe"] <- "Santa Fé"
df_member$barrio[df_member$barrio == "Santa Rosa De Lima"] <- "Santa Rosa de Lima"
df_member$barrio[df_member$barrio == "Alejandro EchavarrÃa"] <- "Alejandro EchavarrÃ�a"
df_member$barrio[df_member$barrio == "Mira Flores"] <- "Miraflores"
df_member$barrio[df_member$barrio == "Ocho De Marzo"] <- "Ocho de Marzo"
df_member$barrio[df_member$barrio == "Villa Lilliam"] <- "Villa Liliam"
df_member$barrio[df_member$barrio == "Altos Del Poblado"] <- "Altos del Poblado"
df_member$barrio[df_member$barrio == "Villa Lilliam"] <- "Villa Liliam"
df_member$barrio[df_member$barrio == "La Loma De Los Bernal"] <- "La Loma de Los Bernal"
df_member$barrio[df_member$barrio == "área De Expansión Belén Rincón"] <- "Área de Expansión Belén Rincón"
df_member$barrio[df_member$barrio == "Carlos E Restrepo"] <- "Carlos E. Restrepo"
df_member$barrio[df_member$barrio == "área De Expansión Belén Rincón"] <- "Área de Expansión Belén Rincón"

Selección de los campos necesarios, barrio y cluster

df_member %>% select(barrio, cluster) -> df_member

Se unen los dataframe de barrios_med en donde se encuentra los poligonos de los barrios de Medellín con su respectivo cluster

barrios_cluster <- merge(barrios_med, df_member[!duplicated(df_member$barrio), ], by.x="NOMBRE", by.y="barrio",  all.x = TRUE)

Se procede a dibujar el mapa de Medellín señalando cada uno de los barrios a que cluster pertenece

map <-leaflet(barrios_cluster)
factpal <- colorFactor(topo.colors(4), barrios_cluster$cluster)
map <- addPolygons(map, popup = nombres_barrios, color = ~factpal(cluster),
  dashArray = "2",
  fillOpacity = 0.7,
  highlight = highlightOptions(
      weight = 5,
      color = "#666",
      dashArray = "",
      fillOpacity = 0.7,
      bringToFront = TRUE),
    #label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "3px 8px"),
      textsize = "15px",
      direction = "auto"))
                 
map <- addTiles(map)
map

Espacialmente se evidenica que para la dimensión VIVIENDA Y SERVICIOS PUBLICOS los grupos se distribuyen en el mapa sectorizado en la mayoría de los casos

Referencias [1] Encuesta calidad de vida. http://medata.gov.co/dataset/encuesta-calidad-de-vida [2] Barrio Vereda. https://geomedellin-m-medellin.opendata.arcgis.com/datasets/c844f0fd764f41b2a808d8747457de8a_4